﻿#ifndef LK_WINDOWS_UI_WINDOW_
#define LK_WINDOWS_UI_WINDOW_
namespace LK
{
	namespace Windows
	{
		namespace UI
		{
			/**
			@brief 表示一个窗体控件*/
			class IWindow :public IControl
			{
			public:
				//复制构造，抛出不支持异常
				IWindow(const IWindow&) { Throw<PNotSupportException >(); }
				//基类通用方法
				BMETHODS(PWindow,IWindow)
				//

				//对API的简单封装

				//设计
				static WNDCLASSEXW& Design();

				//自定义构造函数

				/**
				@brief 构造一个默认的窗体*/
				IWindow() :IControl()
				{
					hMaptc().Lock();//传递指针
					staticPointer = this;
					SetHandle(Create(L"", Rect(300, 300, 400, 400), Design().lpszClassName, WS_OVERLAPPEDWINDOW |WS_CLIPCHILDREN, 0, NULL, NULL));
					hMaptc().UnLock();
				}

				//重写消息循环
				virtual void WndProc(MSG&){}
				//默认消息处理
				virtual LRESULT DefWndProc(MSG& message);
				//重写退出
				virtual bool OnCancel(){ return false; }
			};
			/**
			@brief 表示一个窗体的代理*/
			class PWindow :public PControl
			{
			public:
				//无默认构造函数
				PMETHODS_NODEFCTOR(PWindow, IWindow);
				/**
				@brief 默认构造一个小窗体*/
				PWindow() :PControl(new IWindow()){}
			};
		}
	}
}
#endif
